<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>ecpg</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="REFENTRY">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="app-dropuser.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="app-dropuser.html">快退</a></td><td width="60%" align="center" valign="bottom"></td><td width="10%" align="right" valign="top"><a href="app-pgconfig.html">快进</a></td><td width="10%" align="right" valign="top"><a href="app-pgconfig.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<h1><a name="APP-ECPG"></a><span class="APPLICATION">ecpg</span></h1>
<div class="REFNAMEDIV"><a name="AEN56616"></a><h2>名称</h2><span class="APPLICATION">ecpg</span>&nbsp;--&nbsp;嵌入的 SQL C 预处理器</div>
<a name="AEN56620"></a>
<div class="REFSYNOPSISDIV"><a name="AEN56622"></a><h2>语法</h2>
<p><tt class="COMMAND">ecpg</tt> [<tt class="REPLACEABLE"><i>option</i></tt>...]  <tt class="REPLACEABLE"><i>file</i></tt>..</p>
</div>
<div class="REFSECT1"><a name="APP-ECPG-DESCRIPTION"></a><h2>描述</h2>
<p><tt class="COMMAND">ecpg</tt> 是一个嵌入的用于 C 语言的 SQL 预编译器。它把嵌有 SQL 语句的 C 程序通过将 SQL 调用替换成特殊的函数调用的方法转换成普通的 C 代码。然后输出的文件就可以用任何 C 编译工具进行处理。</p>
<p><tt class="COMMAND">ecpg</tt> 将把命令行上给出的每个输入文件转换成对应的 C 输出文件。输入文件最好有 <tt class="FILENAME">.pgc</tt> 扩展名，这样，这个扩展将被替换成 <tt class="FILENAME">.c</tt> 来决定输出文件名。如果输入文件的扩展不是 <tt class="FILENAME">.pgc</tt> ，那么输出文件名将通过在全文件名后面附加 <tt class="LITERAL">.c</tt> 来生成。输出文件名也可以用 <tt class="OPTION">-o</tt> 选项覆盖。</p>
<p>本手册页并不描述嵌入的 SQL 语句，参阅<a href="http://www.jinbuguo.com/postgresql/manual/ecpg.html">章31</a>获更多信息。</p>
</div>
<div class="REFSECT1"><a name="AEN56642"></a><h2>选项</h2>
<p><tt class="COMMAND">ecpg</tt> 接受下面命令行参数：</p>
<div class="VARIABLELIST">
<dl>
<dt><tt class="OPTION">-c</tt></dt>
<dd><p>为 SQL 代码自动生成某种 C 代码。目前，这个选项可以用于 <tt class="LITERAL">EXEC SQL TYPE</tt></p></dd>
<dt><tt class="OPTION">-C <tt class="REPLACEABLE"><i>mode</i></tt></tt></dt>
<dd><p>设置一个兼容模式。<tt class="REPLACEABLE"><i>mode</i></tt> 可以是 <tt class="LITERAL">INFORMIX</tt> 或 <tt class="LITERAL">INFORMIX_SE</tt> 之一。</p></dd>
<dt><tt class="OPTION">-D <tt class="REPLACEABLE"><i>symbol</i></tt></tt></dt>
<dd><p>定义一个 C 预处理器符号</p></dd>
<dt><tt class="OPTION">-i</tt></dt>
<dd><p>同时也分析系统包含文件</p></dd>
<dt><tt class="OPTION">-I <tt class="REPLACEABLE"><i>directory</i></tt></tt></dt>
<dd><p>声明一个附加的包含路径。用于寻找通过 <tt class="LITERAL">EXEC SQL INCLUDE</tt> 包含的文件。缺省是： <tt class="FILENAME">.</tt>(当前目录)、<tt class="FILENAME">/usr/local/include</tt> 、在编译时定义的 PostgreSQL 包含路径(缺省为 <tt class="FILENAME">/usr/local/pgsql/include</tt>)、<tt class="FILENAME">/usr/include</tt> 。顺序同上。</p></dd>
<dt><tt class="OPTION">-o <tt class="REPLACEABLE"><i>filename</i></tt></tt></dt>
<dd><p>指定 <tt class="COMMAND">ecpg</tt> 应该把它的所有输出写到给出的 <tt class="REPLACEABLE"><i>filename</i></tt> 里。</p></dd>
<dt><tt class="OPTION">-r <tt class="REPLACEABLE"><i>option</i></tt></tt></dt>
<dd><p>选择一个运行时行为。目前，<tt class="REPLACEABLE"><i>option</i></tt> 只能是 <tt class="LITERAL">no_indicator</tt></p></dd>
<dt><tt class="OPTION">-t</tt></dt>
<dd><p>打开自动提交模式。在这种模式像，每个查询都自动提交，除非它是包围在一个明确的事务块中。在缺省模式下，命令只是在发出 <tt class="COMMAND">EXEC SQL COMMIT</tt> 的时候提交。</p></dd>
<dt><tt class="OPTION">-v</tt></dt>
<dd><p>打印额外的信息，包括版本和包含路径。</p></dd>
<dt><tt class="OPTION">--help</tt></dt>
<dd><p>显示一个命令用法的简单摘要，然后退出。</p></dd>
<dt><tt class="OPTION">--version</tt></dt>
<dd><p>显示版本信息，然后退出。</p></dd>
</dl>
</div>
</div>
<div class="REFSECT1"><a name="AEN56722"></a><h2>注意</h2>
<p>在编译预处理的 C 代码文件的时候，编译器需要能够找到 PostgreSQL 包含目录里面的 <span class="APPLICATION">ECPG</span> 头文件。因此，在调用编译器的时候可能需要使用 <tt class="OPTION">-I</tt> 选项(比如 <tt class="LITERAL">-I/usr/local/pgsql/include</tt>)。</p>
<p>使用了嵌入 SQL 的 C 代码必须和 <tt class="FILENAME">libecpg</tt> 库链接，比如，使用这样的链接选项：<tt class="LITERAL">-L/usr/local/pgsql/lib -lecpg</tt></p>
<p>这些目录的实际值可以通过 <a href="app-pgconfig.html">pg_config</a> 找到。</p>
</div>
<div class="REFSECT1"><a name="AEN56734"></a><h2>例子</h2>
<p>如果你有一个叫 <tt class="FILENAME">prog1.pgc</tt> 的嵌入 SQL 的 C 源代码，你可以用下面的命令序列创建一个可执行程序：</p>
<pre class="PROGRAMLISTING">ecpg prog1.pgc
cc -I/usr/local/pgsql/include -c prog1.c
cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg</pre>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="app-dropuser.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="app-pgconfig.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top"><span class="APPLICATION">dropuser</span></td><td width="34%" align="center" valign="top"><a href="reference-client.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">pg_config</td></tr>
</table>
</div>
</body></html>